package com.example.mapper;

import com.example.entity.UserBalance;
import com.example.vo.UserBalanceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface UserBalanceMapper {
    
    // 基础CRUD操作
    int insert(UserBalance userBalance);
    
    int deleteById(Long id);
    
    int updateById(UserBalance userBalance);
    
    UserBalance selectById(Long id);
    
    List<UserBalance> selectList(@Param("userBalance") UserBalance userBalance);
    
    // 根据用户ID查询余额
    UserBalance selectByUserId(@Param("userId") Long userId);
    
    // 根据用户ID查询余额VO（包含用户信息）
    UserBalanceVO selectVOByUserId(@Param("userId") Long userId);
    
    // 查询所有用户余额VO列表
    List<UserBalanceVO> selectVOList(@Param("userBalance") UserBalance userBalance);
    
    // 更新用户余额（原子操作）
    int updateBalance(@Param("userId") Long userId, 
                     @Param("amount") BigDecimal amount, 
                     @Param("isAdd") boolean isAdd);
    
    // 更新用户余额和累计充值金额
    int updateBalanceAndTotalRecharge(@Param("userId") Long userId, 
                                     @Param("rechargeAmount") BigDecimal rechargeAmount);
    
    // 更新用户余额和累计消费金额
    int updateBalanceAndTotalConsume(@Param("userId") Long userId, 
                                    @Param("consumeAmount") BigDecimal consumeAmount);
    
    // 冻结/解冻余额
    int updateFrozenBalance(@Param("userId") Long userId, 
                           @Param("amount") BigDecimal amount, 
                           @Param("isFreeze") boolean isFreeze);
    
    // 统计总数
    long selectCount(@Param("userBalance") UserBalance userBalance);
    
    // 分页查询
    List<UserBalanceVO> selectPage(@Param("offset") int offset, 
                                  @Param("limit") int limit, 
                                  @Param("keyword") String keyword);
}
